﻿//#define IsShowMessgae
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace _040.特性
{
	internal class Program
	{
		[Obsolete("这个方法弃用了，请使用最新的NewTest方法", false)] // 特性： 弃用 就不能调用了  true表示不能调用会报错 默认是 false
		static void Test()
		{
			Console.WriteLine("test");
		}

		static void NewTest()
		{
			Console.WriteLine("NewTest");
		}

		[Conditional("IsShowMessgae")] // 当 #define IsShowMessgae 被定义时 方法会被调用 否则不调用
		static void ShowMessgae(string str)
		{
			Console.WriteLine(str);
		}

		// 调用者信息特性  [CallerLineNumber] int linNumber = 0 多少行
		// [CallerFilePath]string filePath="" 调用者的文件路径
		// [CallerMemberName] string memberName = "" 那个方法调用

		[DebuggerStepThrough] // 当debug调用时会跳过次方法
		static void ShowMessgae2(string str, [CallerLineNumber] int linNumber = 0,
			[CallerFilePath] string filePath = "", [CallerMemberName] string memberName = "")
		{
			Console.WriteLine(str);
			Console.WriteLine(linNumber);
			Console.WriteLine(filePath);
			Console.WriteLine(memberName);
		}
		static void Main(string[] args)
		{
			//Test();

			ShowMessgae("Strat of Main");

			Console.WriteLine("Doing work in Main");

			ShowMessgae("End of Main");

			Console.WriteLine("-----------");
			ShowMessgae2("hello");
		}
	}
}
